//配置路由的地方
import Vue from 'vue'
import VueRouter from 'vue-router'

import routes from './routes';
//引入store
import store from '@/store';
//使用插件
Vue.use(VueRouter)

//配置路由
let router =new VueRouter({
  routes,

  //使用前端路由，当切换到新路由时，想要页面滚到顶部，或者是保持原先的滚动位置，就像重新加载页面那样
  //滚动行为
  scrollBehavior (to, from, savedPosition) {
    // 返回的这个y = 0, 代表的滚动条在最上方 s = 0代表的滚动条水平
    return{y :0}
  }
})  

//全局守卫，前置守卫(在路由跳转之间进行判断)
router.beforeEach(async(to,from,next)=>{
  //to:课获取到你跳转到哪个路由信息
  //from :可以获取到你从哪个路由而来的信息
  //next: 放行函数 --next()放行  next(path)放行到指令路由
  
  //为了测试先全部放行
 // next();
  //用户登录了，才会有token，未登录一定不会有token
  let token = store.state.user.token;
  //用户信息
  let name = store.state.user.userInfo.name;

  //用户已经登陆了
 if(token){
  //用户已经登陆了还想去 login和register [不能去，停留在首页]
  if(to.path=='/login'||to.path=='/register'){
    next('/home');
    console.log(111)
  }else{
    //登录,去的不是login【home|search|detail|shopcart】
    //如果影虎名已有
    if(name){
      next();
      console.log(222)
    }else{
      //登录了且没有用户信息
      try {
        //在路由跳转之前获取用户信息
       await store.dispatch('getUserInfo');
        //放行
        next();
        console.log(333)
      } catch (error) {
        //token失效了获取不到用户信息，从新登录
        //清除token
        await store.dispatch('getLogout');
        next('/login');
      }
    }
  }
 }else{
  //未登录:不能去交易相关、不能去支付相关【pay|paysuccess】、不能去个人中心
  //未登录去上面这些路由------登录
  let toPath = to.path;
  if(toPath.indexOf('/trade')!=-1 || toPath.indexOf('/pay')!=-1 || toPath.indexOf('/center')!=-1){
    next('/login?redirect='+toPath);
  }
  //去掉不是上面这些路由(home|search|shopCatr)-- 放行
  next();

 }
}) 

export default router;